﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Library.BLL;

namespace View
{
    public partial class frmOrgaoPagador : Form
    {

        String acao = String.Empty;
        private const string ALTERACAO = "A";
        private const string CADASTRO = "C";
        public int indiceRetorno = -1;

        #region declaracao dos DataTables
        DataTable dtPagadores;
        #endregion

        #region declaracao dos controllers
        PagadoresController ctrlPagadores = new PagadoresController();    
        #endregion


        public frmOrgaoPagador()
        {
            InitializeComponent();
        }

        private void frmOrgaoPagador_Load(object sender, EventArgs e)
        {
            this.habilitaBotoes(true);
            this.populaOrgaosPagadores();
        }

        private void populaOrgaosPagadores()
        {
            dtPagadores = ctrlPagadores.getAllRecords();
            lstOrgaos.DataSource = dtPagadores;
            lstOrgaos.DisplayMember = "NOME_PAGADOR";
            lstOrgaos.ValueMember = "COD_PAGADOR";
        }

        private void habilitaBotoes(bool flag)
        {

            gbPagadores.Enabled = flag;
            gbEditar.Visible = !flag;

            Size sz = new Size(this.Width,230);

            if (flag)
                this.Size = sz;
            else
            {
                sz.Height = 292;
                this.Size = sz;
            }
        }

        private void btnVoltar_Click(object sender, EventArgs e)
        {
            this.habilitaBotoes(true);
            if (this.acao == CADASTRO)
            {
                dtPagadores.Rows[0].CancelEdit();
                dtPagadores.Clear();
            }
            else
                dtPagadores.Rows[lstOrgaos.SelectedIndex].CancelEdit();

            this.populaOrgaosPagadores();
            this.habilitaBotoes(true);
        }

        private void btnIncluir_Click(object sender, EventArgs e)
        {
            this.habilitaBotoes(false);
            this.acao = CADASTRO;
            dtPagadores = ctrlPagadores.createDataTable();
            dtPagadores.Rows.Add(dtPagadores.NewRow());
            dtPagadores.Rows[0].BeginEdit();
            this.txtOrgao.Text = String.Empty;
        }

        private void btnAlterar_Click(object sender, EventArgs e)
        {
            if (lstOrgaos.Items.Count > 0)
            {
                this.habilitaBotoes(false);
                this.acao = ALTERACAO;
                this.txtOrgao.Text = dtPagadores.Rows[lstOrgaos.SelectedIndex]["NOME_PAGADOR"].ToString();
                dtPagadores.Rows[lstOrgaos.SelectedIndex].BeginEdit();
            }
        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            if (this.validaCampos())
            {
                if (this.acao == CADASTRO)
                {
                    dtPagadores.Rows[0]["COD_PAGADOR"] = ctrlPagadores.getNextCodigoPagador();
                    dtPagadores.Rows[0]["NOME_PAGADOR"] = txtOrgao.Text.ToUpper();
                    dtPagadores.Rows[0].EndEdit();
                    ctrlPagadores.UpdateDataTable(dtPagadores.GetChanges());
                    dtPagadores.AcceptChanges();
                }
                else
                {
                    dtPagadores.Rows[lstOrgaos.SelectedIndex]["NOME_PAGADOR"] = txtOrgao.Text.ToUpper();
                    dtPagadores.Rows[lstOrgaos.SelectedIndex].EndEdit();
                    ctrlPagadores.UpdateDataTable(dtPagadores.GetChanges());
                    dtPagadores.AcceptChanges();
                }

                this.populaOrgaosPagadores();

                this.habilitaBotoes(true);
            }
        }

        private bool validaCampos()
        {
            if (String.IsNullOrEmpty(txtOrgao.Text))
            {
                MessageBox.Show("Digite o nome do orgão pagador.", "Campo obrigatório", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                txtOrgao.Focus();
                return false;
            }
            return true;
        }

        private void lstOrgaos_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (lstOrgaos.SelectedIndex != -1)
            {
                this.indiceRetorno = lstOrgaos.SelectedIndex;
                this.DialogResult = DialogResult.OK;
            }
        }

        private void btnExcluir_Click(object sender, EventArgs e)
        {
            if (lstOrgaos.SelectedIndex != -1)
            {
                DialogResult confirmar = MessageBox.Show("Deseja realmente excluir "+ lstOrgaos.Text + " ?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                if (confirmar == DialogResult.Yes)
                {
                    dtPagadores.Rows[lstOrgaos.SelectedIndex].Delete();
                    ctrlPagadores.UpdateDataTable(dtPagadores.GetChanges());
                    dtPagadores.AcceptChanges();
                }
            }
        }

        private void txtOrgao_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsLetterOrDigit(Convert.ToChar(e.KeyChar)) &&
                !Char.IsControl(Convert.ToChar(e.KeyChar)) &&
                !Char.IsWhiteSpace(Convert.ToChar(e.KeyChar)))
            {
                e.Handled = true;
            }
        }

        private void txtOrgao_TextChanged(object sender, EventArgs e)
        {
            if (!Util.validaCaracteresEspeciais(this.txtOrgao))
                this.txtOrgao.Text = String.Empty;
        }
    }
}
